草庐IT

C++ STL : Custom sorting one vector based on contents of another

全部标签

c++ - STL Character Traits 的重点是什么?

我注意到在我的SGISTL引用拷贝中,有一个关于CharacterTraits的页面,但我看不到它们是如何使用的?它们会替换string.h函数吗?std::string似乎没有使用它们,例如length()方法在std::string不使用字符特性length()方法。为什么会存在CharacterTraits并且它们是否曾在实践中使用过? 最佳答案 字符特征是流和字符串库的一个极其重要的组成部分,因为它们允许流/字符串类将存储哪些字符的逻辑与应该对这些字符执行的操作的逻辑分开。首先,默认的字符特征类,char_traits,在C

c++ - deque 和 list STL 容器有什么区别?

两者有什么区别?我的意思是方法都是一样的。因此,对于用户而言,它们的工作方式相同。对吗?? 最佳答案 让我列出不同之处:Deque使用动态数组,提供随机访问,和几乎一样接口(interface)作为vector。List将其元素作为双向链表提供随机访问。Deque提供快速插入和删除结束和开始。插入和删除元素中间比较慢,因为所有元素,直到两者中的任何一个末端可能会移动以腾出空间或填补空白。在List中,在每个位置插入和移除元素都很快,包括两端。Deque:任何元素的插入或删除除了在开头或结尾使所有指针、引用无效,和引用元素的迭代器双端

c++ - 为什么 STL 映射的 [] 运算符不是 const?

为了这个问题,人为的例子:voidMyClass::MyFunction(intx)const{std::cout这不会编译,因为[]运算符是非常量的。这很不幸,因为[]语法看起来很干净。相反,我必须这样做:voidMyClass::MyFunction(intx)const{MyMapiter=m_map.find(x);std::coutsecond这一直困扰着我。为什么[]运算符是非常量的? 最佳答案 对于std::map和std::unordered_map,如果没有,operator[]会将索引值插入容器中't以前存在。这

c++ - 为什么 vector<bool> 不是 STL 容器?

ScottMeyers的书EffectiveSTL:50SpecificWaystoImprovementYourUseoftheStandardTemplateLibrary的第18条说要避免vector因为它不是一个STL容器,它并没有真正持有bool秒。以下代码:vectorv;bool*pb=&v[0];不会编译,违反了STL容器的要求。错误:cannotconvert'std::vector::reference*{akastd::_Bit_reference*}'to'bool*'ininitializationvector::operator[]返回类型应该是T&,但为什

c++ - 我应该为 FIFO 使用哪个 STL 容器?

哪个STL容器最适合我的需求?我基本上有一个10个元素宽的容器,我不断地在其中push_back新元素同时pop_fronting最旧的元素(大约一百万次)。我目前正在使用std::deque完成任务,但想知道是否是std::list会更有效率,因为我不需要重新分配自己(或者我可能将std::deque误认为std::vector?)。或者是否有更有效的容器来满足我的需要?附言我不需要随机访问 最佳答案 由于有无数的答案,您可能会感到困惑,但总结一下:使用std::queue.原因很简单:它是一种先进先出的结构。你想要先进先出,你使

c++ - C++ STL 中的 const_iterator 和非 const 迭代器有什么区别?

const_iterator和iterator之间有什么区别,你会在哪里使用一个而不是另一个? 最佳答案 const_iterators不允许您更改它们指向的值,常规iteratorss可以。与C++中的所有内容一样,总是更喜欢const,除非有充分的理由使用常规迭代器(即,您想使用它们不是const的事实>更改指向的值)。 关于c++-C++STL中的const_iterator和非const迭代器有什么区别?,我们在StackOverflow上找到一个类似的问题:

c++ - 编写自己的 STL 容器

是否有关于如何编写与任何STL容器类似的新容器的指南? 最佳答案 这是我从第23.2.1\4节拼凑起来的一个序列伪容器。注意iterator_category应该是std::input_iterator_tag、std之一::output_iterator_tag,std::forward_iterator_tag,std::bidirectional_iterator_tag,std::random_access_iterator_tag。另请注意,以下技术上比要求的更严格,但这就是想法。请注意,由于迭代器的强大功能,绝大多数“标

c++ - 如何从具有特定值的 STL vector 中删除项目?

我正在查看STLvector的API文档,并注意到vector类上没有允许删除具有特定值的元素的方法。这似乎是一种常见的操作,而且没有内置的方法来执行此操作似乎很奇怪。 最佳答案 std::remove实际上并没有从容器中删除元素:它将要删除的元素移动到容器的末尾,并返回可以传递给container_type::erase的新结束迭代器实际删除现在位于容器末尾的额外元素:std::vectorvec;//..putinsomevalues..intint_to_remove=n;vec.erase(std::remove(vec.b

c++ - STL 中的双端队列到底是什么?

我正在查看STL容器并试图弄清楚它们到底是什么(即使用的数据结构),deque阻止了我:起初我以为它是一个双链表,这将允许在恒定时间内从两端插入和删除,但我很困扰thepromisemade由运算符[]在恒定时间内完成。在链表中,任意访问应该是O(n)吧?如果是动态数组,怎么可能addelements在恒定时间内?应该提到可能会发生重新分配,并且O(1)是摊销成本,likeforavector.所以我想知道这个结构是什么,它允许在恒定时间内任意访问,同时永远不需要移动到一个新的更大的地方。 最佳答案 双端队列在某种程度上是递归定义的

c++ - 在哪种情况下使用特定的 STL 容器?

我一直在阅读我的C++书中的STL容器,特别是有关STL及其容器的部分。现在我确实明白了它们中的每一个都有自己特定的属性,并且我已经快要记住所有这些属性了……但是我还没有掌握它们每个在什么场景中使用。解释是什么?示例代码更受欢迎。 最佳答案 Thischeatsheet对不同的容器进行了很好的总结。请参阅底部的流程图作为在不同使用场景中使用的指南:创建者DavidMoore和licensedCCBY-SA3.0 关于c++-在哪种情况下使用特定的STL容器?,我们在StackOverfl